Semiconductor memory is widely used in various electronic devices such as cellular telephones, digital cameras, personal digital assistants, medical electronics, mobile computing devices, non-mobile computing devices and data servers. Semiconductor memory may comprise non-volatile memory, volatile memory or both. Non-volatile memory allows information to be stored and retained even when the non-volatile memory is not connected to a source of power (e.g., a battery). Examples of non-volatile memory include flash memory (e.g., NAND-type and NOR-type flash memory), Electrically Erasable Programmable Read-Only Memory (EEPROM), and others.
When a memory system is deployed in or connected to an electronic device (e.g., host), the memory system can be used to store (i.e., write) data and read data. To help ensure the quality of the data, memory systems commonly employ Error Correction Code (“ECC”), where the user data is supplemented with additional ECC data that can be used to correct errors that may arise during the reading, writing, storage, or transfer of the user data. The greater the amount of ECC data used for a set of user data, the greater the amount of error that can be corrected. However, using greater amounts of ECC can diminish performance, as the encoding and decoding of the user data during writing and reading becomes more complex and time consuming, and takes up memory space that otherwise could be used for user data.